package day06;

import java.util.*;

/*
@Author: 王少杰
@Date: 2025/1/6
@Time: 9:36
@FileName: Demo02.java
@描述:
Python set:
        不允许有重复元素
        可变类型
        无序的
Java    set: 接口 不允许有重复元素、可变类型
        Hashset  无序集合，使用Hash算法存储集合中的元素
        TreeSet  有序集合，维护元素的自然顺序（数字按照升序，字符串按照字典序），使用红黑树来存储集合中的元素
        LinkedHashSet  有序集合，维护元素的插入顺序，使用链表和Hash算法存储集合中的元素

最重要的用途:给列表去重
*/
public class Demo02 {
    public static void main(String[] args) {
        Set<Integer> set = new HashSet<>();//多态
        Set<Integer> set1 = new TreeSet<>();//多态
        TreeSet<Integer> set2 = new TreeSet<>();
        //添加元素
        set2.add(1);
        set2.add(2);
        set2.add(3);
        set2.add(4);
        set2.add(5);
        System.out.println(set2);

        //删除元素
        set2.remove(5);//自动装箱，int--->Integer
        set2.remove(3);
        System.out.println(set2);

        System.out.println("是否包含:" + set2.contains(4));
        System.out.println("长度" + set2.size());

        for (Integer integer : set2) {
            System.out.print(integer + "\t");
        }
        System.out.println();

        Iterator<Integer> iterator = set2.iterator();
        while (iterator.hasNext()) {
            System.out.print(iterator.next() + "\t");
        }
        System.out.println();

        //去重
        //字符串类型的列表，定义一个静态方法，返回去重后的列表

        List<String> chrs = Arrays.asList("Z", "A", "B", "C", "D", "B", "C", "D");
        System.out.println(quchong(chrs));
        System.out.println(quchong2(chrs));
        System.out.println(quchong3(chrs));


        //List、set都是从Collection继承的
        //Collection工具类，提供了一些方法，操作List、Set
        Collections.sort(chrs);
        System.out.println(chrs);
        System.out.println(Collections.binarySearch(chrs, "A"));// -(插入点+1)
        System.out.println(Collections.binarySearch(chrs, "B"));// 索引

        Collections.shuffle(chrs);//列表乱序方法
        System.out.println(chrs);

        System.out.println(Collections.min(chrs));//最值
        System.out.println(Collections.max(chrs));//最值

        Collections.reverse(chrs);
        System.out.println(chrs);

        System.out.println(Collections.frequency(chrs, "A"));//统计次数
    }

    public static List<String> quchong(List<String> list) {
        //遍历列表中的每一个元素，如果在新的列表中不存在，加入新的列表
        List<String> result = new ArrayList<>();
        for (String str : list) {
            if (!result.contains(str)) {
                result.add(str);
            }
        }
        return result;
    }
    public static List<String> quchong2(List<String> list) {
        //列表--->集合--->列表,带参的构造方法，使用一个列表/集合创建新的列表/集合。
        HashSet<String> set = new HashSet<>(list);//带参的构造方法
        //带参的构造方法
        return new ArrayList<>(set);
    }

    public static List<String> quchong3(List<String> list) {
        LinkedHashSet<String> set = new LinkedHashSet<>(list);
        return new ArrayList<>(set);
    }
}
